perm filename WAVES.FAI[MUS,LCS] blob sn#318213 filedate 1977-11-14 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00008 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE WAVES
C00007 00003	L101:	SETOM X#
C00009 00004	L6:	JSA 16,DPYOUT
C00014 00005	ININT:	SETZ
C00015 00006	GNAME:	SETZM FILEXT+1
C00016 00007	GETNAM:	MOVEI A,
C00017 00008	DSKIN:	MOVE NN,[INPO:	IOWD =1024,WD]
C00018 ENDMK
C⊗;
	TITLE WAVES
	EXTERNAL TYPLOC,DDCLR,DPYSET
	EXTERNAL DPYOUT,AVECT,ALINE
;*** TO LOAD *****  LOA WAVES,%LTVRLIB *******
;******** DDCLR IS IN TVRLIB.REL *******
	A←1 ↔ B←2 ↔ C←3 ↔ D←5 ↔ K←4 ↔ NN←7 ↔ LPDL←←69 ↔ P←17 
	E←6 ↔ DUR←15 ↔ SKP←11
BEG:	MOVE P,[-LPDL,,PDL-1]
	JSA 16,TYPLOC
	[-=260]
	[-=512]
TRYOV:	CLRBFI
	OUTSTR [ASCIZ/ TYPE FILE NAME(<CR>=TEST.SND) /]
	move [SIXBIT/DSK/]
	MOVEM DEVNAM
	PUSHJ P,GNAME

	OPEN 11,[17
		DEVNAM:	0 
		0]
	JRST 4,.
	LOOKUP 11,FILNAM
	JRST TRYOV

INHDR:	MOVE A,[INPHD:	IOWD =128,WD]
	MOVEI A+1,0
	INPUT 11,A 
TYPIT:	HRRZ B,2(A)		;THE SAMPLE RATE
SRT:	FLTR B,B
	HRRZ C,3(A)		; BITS/SMPL
	MOVEM C,BITS#		;0=12   1=18       
	MOVE D,4(A)            ; NCHNS
	MOVE E,5(A)
	CAML E,[=500000]	;IS IT FLOATING?
	KIFIX E,E			; YES, FIX IT.
	MOVEM E,MAXAMP#		;MAXAMP
	MOVE DUR,6(A)		;DURATION
	MOVEM E,DURX#
	OUTSTR [ASCIZ/
SRATE =/]
	MOVEM B,FSRATE#	
	KIFIX B
	PUSHJ P,OUTINT
	OUTSTR [ASCIZ/   BITS =/]
	IMULI C,=18
	SKIPN C
	MOVEI C,=12
	MOVE C
	PUSHJ P,OUTINT
	OUTSTR [ASCIZ/   NCHNS =/]
	MOVEM D,NCHNS#
	MOVE D
	PUSHJ P,OUTINT
	OUTSTR [ASCIZ/   MAXAMP =/]
	MOVE E
	PUSHJ P,OUTINT
	OUTSTR [ASCIZ/   SMPLS =/]
	MOVE DUR
	PUSHJ P,OUTINT
	OUTSTR [ASCIZ/   100*DUR=/]
	KIFIX  B,FSRATE
	MOVE DUR
	IMULI  =100
	IDIV D
	IDIV B
	PUSHJ P,OUTINT
	SKIPN DUR
	MOVE DUR,[=20000000]  ;IN CASE 0 DURATION IN HEADER

	HRRZI A,=512
	HRRZM A,INC#
	MOVEI 0,1
	MOVEM 0,INCX#		;INCREMENT THROUGH FILE.  1 OR 2
	SOJ D,			;NCHNS
	MOVEM D,NCHNX#		;0=MONO, 1=CH1, 2=CH2
	JUMPE D,L8
	AOS INCX	; MAKE INCREMENT 2 NOW
	OUTSTR [ASCIZ/
TYPE CHANNEL NUM.  /]
	INCHWL B
	PUSHJ P,ININT
	SKIPE			;<CR>=CHAN.1
	SOJ    
	MOVEM 0,NCHNX		;ADD 0 FOR CH1.  ADD 1 FOR CH2.
L8:	CLRBFI
	OUTSTR [ASCIZ/ 

TYPE NUM OF SAMPLES (<CR>=512) AND SKIP NUMBER. /]
	HRRZI A,=1024
	HRRZM A,NEXT#
	INCHWL B
	PUSHJ P,ININT
	MOVEI 1,=3072
	MOVE 2,NCHNS
	CAIE 2,1
	IDIVI 1,2
	MOVEM 1,XXX#		;A BUFFER SIZE (3072 OR 1536 FOR STEREO)
	CAMLE 1     		;WON'T DISPLAY MORE THAN 3072 SMPLS AT A TIME.
	MOVE  1    	;AC1 HAS 3072 OR 1536(STEREO)
JINC:	MOVEM J#
	SETZ
	INCHRS B
	CAIA
	PUSHJ P,ININT
	SETZM SKP
	JUMPE 0,INCR		;NO SKIP AHEAD
	MOVEI A,3
	SUB A,BITS
	MOVEM A,BDIV#		;BIT DIVIDER
	IDIV 0,BDIV
	MOVE SKP,0		;SKP HAS NUM OF WDS TO SKIP
	SETZ 0,
	SKIPA
SLOOP:	PUSHJ P,DSKIN		;THROW AWAY A BUFFER FULL
	ADDI 0,=1024
	MOVEM 0,NEXT
	CAMG 0,SKP
	JRST SLOOP		;GO BACK IF MORE TO THROW AWAY
	SUBI 0,=1024
	IMUL 0,BDIV		;SKP NOW HAS NUM OF SMPLS SKIPPED.
	EXCH SKP,0		

INCR:	SKIPE B,J
	MOVEM B,INC

	MOVE A,NCHNX		;GET THE INCREMENT NUM.
	ADD A,SKP
	MOVEM A,JCNT#
	AOJ A,
	MOVEM A,KCNT#
	SETZM JZ#
L11:	HRRZI A,1
	HRRZM A,L#
	MOVE A,INC
	MOVEM A,LX#

L100:	PUSHJ P,DSKIN
	MOVEI 0,=1024
	ADDM 0,NEXT	;FOR LATER SKIP AHEAD
L101:	SETOM X#
	SETZ K,
	MOVEI =3073
	SUB NCHNS
	MOVEM COMPAR#			;FOR LOOP BELOW
	MOVE A,[POINT 12,WD]
L2:	SKIPE WD(K)
	SETZM X
	ILDB 0,A
	HRRZM 0,FW(K)
	ILDB 0,A
	HRRZM 0,FW+1(K)
	ILDB 0,A
	HRRZM 0,FW+2(K)
	ADDI K,3
	CAIGE K,=3072
	JRST L2
;	SKIPE X		ADD THIS TO RESTART ON ZEROS
;	JRST L8
L1:	JSA 16,DDCLR
	MOVE A,[=1000.0]
	MOVE 10,INC
	IDIV 10,NCHNS
	FLTR B,10 
	FDVR A,B
	MOVEM A,X
L40:	JSA 16,DPYSET
	[1]
	DP
	[=4000]
	JSA 16,ALINE
	NFHD
	[=409]
	NFHD
	[-=409]
	JSA 16,ALINE
	[=500]
	ZER
	NFHD
	ZER
L10:	MOVE A,[-=500.0]
	MOVEM A,Z#
	MOVE K,L
	ADD K,NCHNX	;ADDS 0 OR 1 (FOR STEREO)
L4:	MOVE INCX
	ADDM JCNT 
	CAMGE DUR,JCNT
	JRST L6 		;END OF SAMPLES, GO DPY IT.
	MOVE A,FW-1(K)
	CAILE A,=2047
	SUBI A,=4096
	MOVEM A,JZ
	IDIVI A,5
	MOVEM A,JY#
	KIFIX A,Z
	MOVEM A,JX#
	JSA 16,AVECT
	JX
	JY
	CAML K,COMPAR
	JRST L6
	MOVE A,X
	FADM A,Z
	ADD K,INCX	;ADDS 1 OR 2(STEREO)
	CAMG K,LX
	JRST L4
L6:	JSA 16,DPYOUT
	[1]
	CAMLE DUR,JCNT		;EXIT IF COUNTER EXCEEDS NUM. SMPLS.
	JRST L31
	SETZM INC
	OUTSTR [ASCIZ/ ******* END OF SAMPLES ******* /]
L31:	MOVE NCHNS
	CAIN 1
	JRST L32
	MOVE NCHNX
	JUMPN L32-1
	OUTSTR [ASCIZ/ CH.1 /]
	SKIPA
	OUTSTR [ASCIZ/ CH.2 /]
L32:	OUTSTR [ASCIZ/ SMPL /]
	MOVE KCNT
	PUSHJ P,OUTINT
	OUTSTR [ASCIZ/ TO /]
	MOVE JCNT
	PUSHJ P,OUTINT
	OUTSTR [ASCIZ/
/]
L55:	MOVE A,J
	AOJ A,
	JUMPE A,L7
	AOJ A,
	JUMPE A,L12
L5:	CLRBFI
	INCHWL B
	PUSHJ P,ININT
	MOVEM J
	SETZ
	INCHRS B
	CAIA
	PUSHJ P,ININT
	IMUL NCHNS		;BY 1 OR 2
	MOVEM NX
	MOVE A,XXX   
	CAMGE A,J
	MOVEM A,J
L77:	SKIPLE A,J
	MOVEM A,INC
	ADDI A,2
	JUMPGE A,L7
	JRST L9
L12:	MOVE A,L
	ADD A,NX#
	MOVEM A,LX
	MOVE A,KCNT
	ADD A,NX
	SOJ A,
	MOVEM A,JCNT
	JRST L7
L9:	MOVE A,L
	ADD A,J
	MOVEM A,LX
	MOVE A,KCNT
	ADD A,J
	SOJ A,
	MOVEM A,JCNT
	SKIPGE LX
	SETZM LX
L7:	MOVE A,LX
	AOJ A,
	MOVEM A,L
	MOVE A,INC
	ADDM A,LX
	MOVE A,JCNT
	AOJ A,
	MOVEM A,KCNT
	MOVE A,L
	CAILE A,=3072
	JRST L11
	JRST L1
ININT:	SETZ
	SETZ C,
	CAIN B,"-"
	JRST MIN
RECUR:	CAIL B,60
	CAILE B,71
	JRST SYNE
	IMULI =10
	ADDI -60(B)
GTCHR:	INCHRS B
	CAIA
	JRST RECUR
SYNE:	SKIPGE C
	MOVNS
	POPJ P,
MIN:	SETO C,
	JRST GTCHR

OUTINT:	HRRZI B,7	;16
	JUMPE OUTZ
	IDIVI =10
	ADDI A,60
	HRRZM A,BLK1(B)
	SOJGE B,OUTINT+1
OCHR:	OUTCHR BLK1+1(B)
	CAIGE B,6	;15
	AOJA B,OCHR
	POPJ P,
OUTZ:	CAIL B,7	;16
	HRLZI B,300000
	JRST OCHR

INA5:	SETZ A,
	HRLZI C,700
	INCHWL
	CAIE 15
	CAIN 12
	POPJ P,
	IDPB C
	TRNN A,177
	INCHRS
	POPJ P,
	JRST .-7

GNAME:	SETZM FILEXT+1
	SETZM FILPPN
	MOVE A,['SND   ']
	MOVEM A,FILEXT
	PUSHJ P,GETNAM
	SKIPN A
	MOVE A,['TEST  ']
	CAIE C,":"		;CHECK FOR DEVICE NAME
	JRST GEXT		;NO
	MOVEM A,DEVNAM		;YES, DEV. NAME
  	JRST GNAME+2		;GO BACK AND LOOK FOR FILE NAME.
GEXT:	MOVEM A,FILNAM
	CAIE C,"."
	JRST NOEXTN
	PUSHJ P,GETNAM
	MOVEM A,FILEXT
NOEXTN:	CAIE C,"["
	JRST FFDX
	PUSHJ P,GETP
	HRLZM A,FILPPN
	PUSHJ P,GETP
	HRRM A,FILPPN
FFDX:	INCHRW C
	CAIE C,12
	JRST FFDX
	POPJ P,
GETNAM:	MOVEI A,
	MOVE B,[440600,,A]
GETNML:	PUSHJ P,RCH
	POPJ P,
	SUBI C,40
	TLNE B,770000
	IDPB C,B
	JRST GETNML

GETP:	MOVEI A,
GETPL:	PUSHJ P,RCH
	POPJ P,
	TRNE A,770000
	JRST GETPL
	LSH A,6
	ADDI A,-40(C)
	JRST GETPL

RCH:	INCHWL C
	CAIN C,42
	JRST RCHQ
	CAIE C,11
	CAIN C," "
	JRST RCH
	CAIN C,":"		;LOOK FOR DEVICE NAME
	POPJ P,
	CAIE C,"."
	CAIN C,","
	POPJ P,
	CAIE C,"["
	CAIN C,"]"
	POPJ P,
RCHQR:	CAIGE C,40
	POPJ P,
	CAIL C,"a"
	CAILE C,"z"
	CAIA
	SUBI C,40
POPJ1:	AOS (P)
	POPJ P,

RCHQ:	INCHWL C
	JRST RCHQR
DSKIN:	MOVE NN,[INPO:	IOWD =1024,WD]
	MOVEI NN+1,0
	INPUT 11,NN
	POPJ P,
	
FILNAM:	0
FILEXT:	0
	0
FILPPN:	0
	
BLK1:	BLOCK 17
DP:	0

WD:	BLOCK =1024

FW:	BLOCK =1024*3

NFHD:	-=500
ZER:	0
PDL:	BLOCK LPDL
	END BEG